/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package admin.reportes;

import DBMS.DataBaseManager;
import admin.permisos.PermisosManager;
import clases.Matriz;
import clases.Reportable;
import clases.Reporte;
import clases.Unidad;
import clases.Usuario;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

/**
 * @Author Gimbet
 */
public class AgregarReporte extends DispatchAction {

    private String SUCCESS = "success";
    private String FAILURE = "failure";
    private String PAGE = "page";
    private String ALL = "all";
    private static final String name = "Agregar Reporte";

    public ActionForward populate(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        // Agregamos las unidades
//        Usuario usr = (Usuario) request.getSession().getAttribute("logueado");
//        DataBaseManager dbms = DataBaseManager.getInstance();
//        if (!PermisosManager.validar(this.name, dbms.consultarPermisoAccion(name), usr.getPermiso())) {
//            System.out.println("No tiene permiso");
//            return mapping.findForward(FAILURE);
//        }
        DataBaseManager dbms = DataBaseManager.getInstance();
        ArrayList<Unidad> unidades = DataBaseManager.getInstance().getUnidades();
        request.setAttribute("unidades", unidades);
        return mapping.findForward(PAGE);
    }

    public ActionForward init(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
//        Usuario usr = (Usuario) request.getSession().getAttribute("logueado");
//        DataBaseManager dbms = DataBaseManager.getInstance();
//        if (!PermisosManager.validar(this.name, dbms.consultarPermisoAccion(name), usr.getPermiso())) {
//            System.out.println("No tiene permiso");
//            return mapping.findForward(FAILURE);
//        }
        DataBaseManager dbms = DataBaseManager.getInstance();
        Reporte r = (Reporte) form;
//        DataBaseManager dbms = DataBaseManager.getInstance();
        int reporteAgregado = dbms.agregarReporte(r);

        if (reporteAgregado > 0) {
            System.out.println("Reporte agregado");
            request.setAttribute("reporte", r);
            return mapping.findForward(SUCCESS);
        } else {
            return mapping.findForward(FAILURE);
        }
    }

    public ActionForward save(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
//        Usuario usr = (Usuario) request.getSession().getAttribute("logueado");
//        DataBaseManager dbms = DataBaseManager.getInstance();
//        if (!PermisosManager.validar(this.name, dbms.consultarPermisoAccion(name), usr.getPermiso())) {
//            System.out.println("No tiene permiso");
//            return mapping.findForward(FAILURE);
//        }
        DataBaseManager dbms = DataBaseManager.getInstance();
        Reporte r = (Reporte) form;
//        DataBaseManager dbms = DataBaseManager.getInstance();
        Reporte r1 = new Reporte();
        r1.setIdreporte(r.getCodigoReporte());
        r1 = dbms.consultarReporte(r1);
        ArrayList<Reportable> reportables = dbms.consultarElementosReporte(r1);

        for (Reportable reportable : reportables) {
            Matriz m = (Matriz) reportable;
            if (dbms.agregarMatrizReporte(m, r)) {
                System.out.println("m.isPlan, m.isAj, m.isEjec" + m.isPlan() + " " + m.isAjuste() + " " + m.isEjec());
                if (dbms.modificarMatrizReporte(m, r)) {
                    System.out.println("ID de la matriz " + m.getIdMatriz() + "  del reporte " + r.getIdreporte());

                } else {
                    //ya existe
                    r.setMensaje("Error al guardar reporte");
                    System.out.println("Error al guardar reporte");
                    return mapping.findForward(FAILURE);
                }
            }
            r.agregarElemento(m);
        }

        r.setMensajeOK("Exito guardando reporte");
        request.setAttribute("reporte", r);
        return mapping.findForward(SUCCESS);
    }
}
